关于Qt的LineEdit

jinzhou520 2014-11-12 05:11:36
请教一个问题


我用mainwindow实现的, 代码全部手写, 没有通过ui布局. 颜色配置全部通过setStyleSheet函数配置
qt版本: qt5.3.2
PC: windows 8

现在出现一个问题:
当鼠标滑过两个LineEdit时,LineEdit的背景会短暂的改变为白色,然后立马恢复成背景色.请问这个问题怎么解决?
...全文
1268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SetDreamer 2015-05-07
  • 打赏
  • 举报
回复
很详细,谢谢楼主
michael2988 2014-11-12
  • 打赏
  • 举报
回复
没设置其它应该不会啊,

useredit->setStyleSheet(QString("background:(0,255,0,0);"));
passwdedit->setStyleSheet(QString("background:(0,255,0,0);"));
应为

useredit->setStyleSheet(QString("background:rgba(0,255,0,0);"));
passwdedit->setStyleSheet(QString("background:rgba(0,255,0,0);"));
jinzhou520 2014-11-12
  • 打赏
  • 举报
回复

    QWidget* loginwidget = new QWidget;
    // 窗口设定
    setWindowTitle(tr("LOGIN"));
    setFixedSize(this->width, this->height);
    this->setCentralWidget(loginwidget);

    titlelab = new QLabel;
    // 必须先设置其大小,然后才能进行其它配置
    titlelab->setFixedSize(this->width, 90);
    titlelab->setFrameRect(QRect(0, 0, this->width, 90));
    titlelab->setStyleSheet(QString("background-image:url(:/images/images/logo.png)"));
    //titlelab->resize(img.width(),img.height());

    QFont font;
    font.setFamily(QString::fromUtf8("\345\276\256\350\275\257\351\233\205\351\273\221"));
    font.setPointSize(12);

    useredit = new QLineEdit;
    useredit->setFont(font);
    useredit->setFixedSize(130, 25);
    useredit->setStyleSheet(QString("background:(0,255,0,0);"));
    userlab = new QLabel;
    userlab->setText(tr("USER NAME"));
    userlab->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
    userlab->setFixedSize(92, 20);
    userlab->setFont(font);
    userlab->setStyleSheet(QString("color: rgb(0,0,255);"));
    userlab->setBuddy(useredit);

    passwdedit = new QLineEdit;
    passwdedit->setFont(font);
    passwdedit->setFixedSize(130, 25);
    passwdedit->setStyleSheet(QString("background:(0,255,0,0);"));
    passwdlab = new QLabel;
    passwdlab->setText(tr("PASSWORD"));
    passwdlab->setAlignment(Qt::AlignVCenter|Qt::AlignLeft);
    passwdlab->setFixedSize(92, 20);
    passwdlab->setFont(font);
    passwdlab->setStyleSheet(QString("color: rgb(0,0,255);"));
    passwdlab->setBuddy(passwdedit);

    // 用户名和密码
    QFormLayout *userform = new QFormLayout(parent);
    userform->addRow(userlab, useredit);
    userform->addRow(passwdlab, passwdedit);
    userform->setLabelAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    userform->setFormAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    // 设置水平控件间隔
    userform->setHorizontalSpacing(4);
    // 设置垂直控件间隔
    userform->setVerticalSpacing(8);
    // 设置外边框距窗口距离
    userform->setContentsMargins(0, 0, 0, 0);

    // 记住密码 登陆按钮
    remembercheck = new QCheckBox;
    remembercheck->setFont(font);
    remembercheck->setFixedSize(100, 30);
    remembercheck->setText(tr("Remember"));
    loginbtn = new QPushButton;
    loginbtn->setText(tr("Login"));
    loginbtn->setFont(font);
    loginbtn->setFixedSize(84, 30);
    QHBoxLayout *btnlayout = new QHBoxLayout;
    btnlayout->setContentsMargins(0, 0, 30, 0);
    btnlayout->addWidget(remembercheck);
    btnlayout->addWidget(loginbtn);
    btnlayout->setStretch(0, 11);
    btnlayout->setStretch(1, 9);

    // 状态栏
    statlab = new QLabel;
    statlab->setFixedSize(320, 12);
    statlab->setText(tr("Please input user and password..."));
    font.setPixelSize(11);
    statlab->setFont(font);
    statlab->setStyleSheet(QString("color:rgba(191,58,224,255);background-color:rgba(160,184,166,255)"));
    font.setPixelSize(12);

    // 登陆窗口
    QVBoxLayout *loginlayout = new QVBoxLayout;
    loginlayout->setContentsMargins(0, 0, 0, 0);
    loginlayout->addWidget(titlelab);
    loginlayout->addLayout(userform);
    loginlayout->addLayout(btnlayout);
    loginlayout->addWidget(statlab);
这是我的代码
jinzhou520 2014-11-12
  • 打赏
  • 举报
回复
引用 2 楼 michael2988 的回复:
qt style sheet 是 cascading 的,如果LineEdit没有特别处理,应该不会发生这种情况。你是否进行了如下设置

// like this
setStyleSheet("QLineEdit:hover { background: white }");
lineedit根本没有配置,只配置总的layout的背景(我所有控件放在一个QVBoxLayout中的). 我可能没有描述清楚, lineedit变白,只是鼠标进入或者离开的一瞬间. 举个例子: 鼠标进入lineedit, 控件背景马上变为白色,然后立马恢复成透明.这时候我的鼠标还是在控件内部的. 当我鼠标离开控件的时候,也会出现背景白一下的问题.
jinzhou520 2014-11-12
  • 打赏
  • 举报
回复
引用 1 楼 wenwu1225 的回复:
你的setStyleSheet函数里有没有QLineEdit:hover的设置?
lineedit根本没有配置,只配置总的layout的背景(我所有控件放在一个QVBoxLayout中的). 我可能没有描述清楚, lineedit变白,只是鼠标进入或者离开的一瞬间. 举个例子: 鼠标进入lineedit, 控件背景马上变为白色,然后立马恢复成透明.这时候我的鼠标还是在控件内部的. 当我鼠标离开控件的时候,也会出现背景白一下的问题.
michael2988 2014-11-12
  • 打赏
  • 举报
回复
qt style sheet 是 cascading 的,如果LineEdit没有特别处理,应该不会发生这种情况。你是否进行了如下设置

// like this
setStyleSheet("QLineEdit:hover { background: white }");
wenwu1225 2014-11-12
  • 打赏
  • 举报
回复
你的setStyleSheet函数里有没有QLineEdit:hover的设置?

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧