如何在Qt中显示带有是/否按钮的消息框,如何检查按下哪个按钮?
即一个看起来像这样的消息框:

我有一个创建QMessageBox的动作.在该对话框中,我想打印一个包含多个项目的列表.我有以下代码:
void MainWindow::onAboutActivated(){
qDebug() << "about";
QMessageBox::about(this,
"Autor: \n"
"\n"
"Umoznuje:"
"<ul>"
"<li> Item 1 </li>"
"<li> Item 2 </li>"
"<li> Item 3 </li>"
"</ul>");
Run Code Online (Sandbox Code Playgroud)
但是,这不会打印列表,而是带有html标签的文本.我该如何打印清单?有任何想法吗?
我有一个QMessageBox我希望它更大.这是一个简单QMessageBox的两个标准按钮,确定和取消.问题是它对于我的应用程序而言非常小.代码显示如下:
QMessageBox msg;
msg.setText("Whatever");
msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msg.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
int ret = msg.exec();
switch (ret) {
case QMessageBox::Ok:
ui->textEdit->clear();
break;
case QMessageBox::Cancel:
break;}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来增加大小:
msg.setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
msg.setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
msg.setFixedHeight(600);
msg.setFixedWidth(600);
Run Code Online (Sandbox Code Playgroud)
我甚至清理并重建,它编译了一切,但没有任何生效...
您对如何"手动"设置QMessageBox大小有任何想法吗?谢谢.
我正在构建一个Qt Symbian项目,我想向用户显示应在几秒后自动关闭的通知.我看到诺基亚在他们的ui中使用了很多.
现在我正在使用下面的代码,以便用户可以关闭QMessageBox但我希望它能在1或2秒后自动关闭QMessageBox.我怎么能用Qt做到这一点?
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
Run Code Online (Sandbox Code Playgroud) // main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow* window = new MainWindow();
window->show();
return app.exec();
}
// mainwindow.cpp
#include <QTimer>
#include <QMessageBox>
#include <iostream>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
this->setCentralWidget(new QWidget());
}
void MainWindow::mousePressEvent(QMouseEvent* event)
{
this->hide();
QTimer* timer = new QTimer();
timer->setInterval(3*1000);
timer->start();
connect(timer, SIGNAL(timeout()), this, SLOT(showMessageBox()));
}
void MainWindow::showMessageBox()
{
QMessageBox::information(this, "Hello,", "world!", QMessageBox::Ok);
}
MainWindow::~MainWindow()
{
std::cerr << "Destructor called" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我点击窗口 - 它隐藏,QMessageBox出现.我单击"确定" - …
这是我的代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
testApp w;
w.show();
TestClass *test = new TestClass;
QObject::connect(w.ui.pushButton, SIGNAL(clicked()), test, SLOT(something()));
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
TestClass.h
class TestClass: public QObject
{
Q_OBJECT
public slots:
void something()
{
TestThread *thread = new TestThread;
thread -> start();
}
};
Run Code Online (Sandbox Code Playgroud)
TestThread.h
class TestThread: public QThread
{
Q_OBJECT
protected:
void run()
{
sleep(1000);
QMessageBox Msgbox;
Msgbox.setText("Hello!");
Msgbox.exec();
}
};
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会看到错误
必须在gui线程中创建小部件
我究竟做错了什么?请帮我.我知道我不能在另一个线程中改变gui,但我不知道qt中的构造.
我有一个基于用户输入生成的列表。
我正在尝试在 QMessageBox 中显示此列表。但是,我无法知道这个列表的长度。名单可能很长。
因此,我需要向 QMessageBox 添加滚动条。
有趣的是,我到处寻找,但我还没有找到任何解决方案。
下面是我希望是一个“最小的、完整的和可验证的示例”,当然没有用户输入;我刚刚创建了一个列表作为示例。
我很感激任何建议。
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class W(QWidget):
def __init__(self):
super().__init__()
self.initUi()
def initUi(self):
self.btn = QPushButton('Show Message', self)
self.btn.setGeometry(10, 10, 100, 100)
self.btn.clicked.connect(self.buttonClicked)
self.lst = list(range(2000))
self.show()
def buttonClicked(self):
result = QMessageBox(self)
result.setText('%s' % self.lst)
result.exec_()
if __name__ == "__main__":
app = QApplication(sys.argv)
gui = W()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 我注意到一件有趣的事情 - 如果我向 QMessageBox 添加详细文本(它添加了“显示详细信息...”按钮),然后执行它将显示系统框架的关闭 (X) 按钮已禁用,因此将此窗口标记为不可关闭(右键单击框架 -> 关闭禁用)。
下面是一些示例代码:
QMessageBox box(QMessageBox::Critical, title, text, QMessageBox::Ok);
box.setDetailedText(detailedText); // comment this line to get close button enabled
box.exec();
Run Code Online (Sandbox Code Playgroud)
我什至没有找到在 Qt 中手动执行此操作的方法。有任何想法吗?
谢谢
我正在制作 QMessageBox,但无法将弹出窗口中的文本和按钮居中。
这是我的消息框的代码:
def update_msgbox(self):
self.msg = QMessageBox(self.centralwidget)
self.msg.setWindowTitle(" Software Update")
self.msg.setText("A software update is available. \nDo you want to update now?")
self.msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
self.msg.setStyleSheet("QLabel{min-width: 200px;}")
self.msg.exec_()
Run Code Online (Sandbox Code Playgroud)
这是弹出窗口当前的样子:
有没有办法使文本居中和按钮居中?