相关疑难解决方法(0)

如何确定QTableWidget的正确大小?

没有办法设置QTableWidget的"正确"大小?(我是新手)这个测试代码只有25行,在两个文件中,文件Test.h:

#include <QtGui>
class Test : public QMainWindow {
   Q_OBJECT
public:
   Test();
};
Run Code Online (Sandbox Code Playgroud)

和Test.cpp文件:

#include "Test.h"
Test::Test() : QMainWindow() {
   QVBoxLayout *vbox = new QVBoxLayout;
   QPushButton  *btn = new QPushButton("Hello World etc etc etc etc etc");
   QTableWidget *tbl = new QTableWidget(2, 2);
   vbox->addWidget(btn);
   vbox->addWidget(tbl);
   QWidget *w = new QWidget;
   setCentralWidget(w);
   w->setLayout(vbox);
   resize(1, 1);
}

int main(int argc, char *argv[]) {
   QApplication app(argc, argv);
   Test test;
   test.show();
   app.exec();
}
Run Code Online (Sandbox Code Playgroud)

然后命令:

   qmake -project && qmake && make && ./Test
Run Code Online (Sandbox Code Playgroud)

给出窗口: …

c++ qt

30
推荐指数
5
解决办法
3万
查看次数

Qt:更新在显示之前隐藏的小部件?

我有两个QDialog堆叠在一起,其中一些数据在每个对话框的布局中显示在一个QWidget中显示(一个小部件以图形方式显示一个计数).

在当前显示的QDialog中,用户可以更改该数据.此更改将传播到两个小部件,并在当前QDialog中显示正确的计数.但是,当用户关闭该QDialog,并且下面的那个变得可见时,显示计数的QWidget会显示旧值,然后再更新为正确的值.

我知道下面的QWidget在显示其他QDialog之前具有正确的值,但我似乎无法让Dialog 可见之前更新.我试过这个,但仍然隐藏着:

hiddenDialog->layout()->activate()

hiddenDialog->layout()->update()

但是在显示对话框之后,它仍然无法实际更新.我的问题似乎与Qt有关:如何强制隐藏的小部件来计算其布局?,除了我想在设置Qt :: WA_DontShowOnScreen后显示QDialog.打开Qt :: WA_DontShowOnScreen并更新对话框后,我尝试设置:

dialog->setAttribute(Qt::WA_DontShowOnScreen, false);

dialog->show()

但对话框仍未显示在屏幕上.有没有办法让它再次可见?或者是否有一些方法可以让对话框和窗口小部件在被其他对话框隐藏时更新?


以下是按要求提供的更多详细信息:有两个类,Dialog1和Dialog2,每个类都扩展了相同的基类BaseDialog,它扩展了QDialog类.

BaseDialog有一个插槽,只要GlobalCount发生变化就会被调用.此插槽更新countWidget,用于绘制计数图片.

void BaseDialog::updateCountWidget()
{
    _countWidget->updateCount(globalCount);
    _countWidget->update();
}
Run Code Online (Sandbox Code Playgroud)

Dialog1有一个插槽(从QPushButton click()连接)创建并显示Dialog2:

void Dialog1::showDialog2()
{
    Dialog2* dialogTwo = new Dialog2();
    dialog2->show();
}    
Run Code Online (Sandbox Code Playgroud)

Dialog2有两个插槽(连接到QPushButton信号),一个从全局计数中减去,另一个用于关闭对话框.当减去全局计数时,它会发出连接到Dialog1和Dialog2的updateCountWidget()槽的信号.

void Dialog2::subtractCount()
{
    GlobalCount.subtractOne();
}

void Dialog2::userClosed()
{
    accept();
}
Run Code Online (Sandbox Code Playgroud)

当我单击减去按钮时,我可以看到Dialog2的_countWidget正确更新.但是,当我关闭Dialog2,并且可以再次看到Dialog1时,Dialog1的_countWidget显示一秒钟的原始计数值,然后更新为新值.

我的目标是防止这种瞬间更新,因为它看起来对用户来说非常时髦.这已经变得非常漫长,但我很欣赏任何见解!

c++ user-interface qt

6
推荐指数
1
解决办法
6097
查看次数

如何设置QDialog的宽度和高度,并允许自动放置窗口

有没有办法初始化QDialog的宽度和高度,而不使用ui文件更改x和y坐标?我只有一个简单的QDialog并且只想设置宽度和高度,并且x和y自动设置为父级的中心,但是当我尝试setGeometry时,继承的几何的x和y是0. x怎么样当使用ui文件创建对话框时,是否设置了?

class MyDialog : public QDialog
{
    MyDialog::MyDialog(QWidget *parent) :
        QDialog(parent)
    {
        setGeometry(geometry().x(), geometry().y(), 200, 400);
    }
}
Run Code Online (Sandbox Code Playgroud)

qt qdialog

5
推荐指数
3
解决办法
2万
查看次数

标签 统计

qt ×3

c++ ×2

qdialog ×1

user-interface ×1