Qt PushButton单击的槽函数里面改变此按钮背景色,会在槽函数执行完之后才更改,有没有立刻生效的方法?
QPushButton:pressed {
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(60, 186, 162, 255), stop:1 rgba(98, 211, 162, 255))
}
QPushButton {
background-color: #3cbaa2; border: 1px solid black;
border-radius: 5px;
}
QPushButton:disabled {
background-color: rgb(170, 170, 127)
}
你可以在pressed槽函数里面改变颜色,pressed 先于 clicked 执行
ui界面,在属性栏找到stylesheet,点击旁边的省略号;点击【添加颜色】,选择color修改文字颜色,选择background-color修改背景色。
还可以去了解一下QSS,它是 Qt 提供的一种用来自定义控件外观的机制,就是美化样式的,和CSS很像。如果是做一个大的项目需要统一样式,QSS还是比较方便的
是的,有一种立刻生效的方法。您可以使用Qt的事件循环机制,通过在槽函数中使用QMetaObject::invokeMethod函数,来把更改背景色的操作放入事件队列中,从而实现立刻生效。
具体实现方法如下:
void MainWindow::on_pushButton_clicked()
{
QMetaObject::invokeMethod(ui->pushButton, "setStyleSheet", Qt::QueuedConnection,
Q_ARG(QString, "background-color: red;"));
}
这样,在槽函数中改变按钮背景色的操作将立刻生效,而不是等到槽函数执行完之后再生效。
不知道你这个问题是否已经解决, 如果还没有解决的话:按钮点击过后响应槽函数,在槽函数里面好像是不可以使用if判断语句的,所以使用switch-case语句来实现多种状态的切换。在全局定义一个标志位,
(A)只有两种状态的情况:
注:num在声明时我定义为1,可以根据个人设置。
switch(num)
{
case 1: ui->label->setNum(num);num--;ui->pushButton->setText("≧◇≦"); break;
case 0: ui->label->setNum(num);num++;ui->pushButton->setText("^_^");break;
}
效果如下图所示,点击按钮,label中的数字进行0-1,1-0的切换,按钮的图标也随之变换。
(B)多种状态的情况:
switch(num)
{case 1: ui->label->setNum(num);num++;ui->pushButton->setText("≧◇≦"); break;
case 2: ui->label->setNum(num);num++;ui->pushButton->setText("^_^");break;
case 3: ui->label->setNum(num);num++;ui->pushButton->setText("╮( ̄▽  ̄)╭");break;
case 4: ui->label->setNum(num);num=num-4;ui->pushButton->setText("(=^_^=)");break;
case 0: ui->label->setNum(num);num++;ui->pushButton->setText(" (︶︿︶)");break;
}
}
效果如下图所示,每次点击按钮,label中的数字进行0-1-2-3-4-0-1,1-0的切换一次状态,按钮的图标也随之变换。