标签: qdialog

我怎么知道窗口是否被模态阻塞

我有几个模态对话框和主对话框,其中有exec()模态。我怎么知道主窗口是否被模态遮挡了?

qt modal-dialog qdialog

5
推荐指数
1
解决办法
893
查看次数

没有参数的QDialog显式构造函数 - 如何正确使用?

我通过派生类体验过这一点,但它与QDialog基类相同:

当我做

QDialog dialog();
dialog.exec();
Run Code Online (Sandbox Code Playgroud)

编译器抱怨

J:\...\mainwindow.cpp:-1: In member function 'void MainWindow::on_viewButton_pressed()':
J:\...\mainwindow.cpp:72: Fehler:request for member 'exec' in 'dialog', which is of non-class type 'QDialog()'
Run Code Online (Sandbox Code Playgroud)

这与使用的构造函数有关,因为当我这样做时

QDialog dialog(0);
dialog.exec();
Run Code Online (Sandbox Code Playgroud)

代码编译没有错误.这也有效:

QDialog *dial = new QDialog();
dial->exec();
Run Code Online (Sandbox Code Playgroud)

所以.是因为一个显式的构造函数?

文档称其定义为

QDialog::QDialog ( QWidget * parent = 0, Qt::WindowFlags f = 0 )
Run Code Online (Sandbox Code Playgroud)

那么前两个例子不应该完全一样吗?为什么编译器会抱怨第二行,而不是构造函数.

感谢您的启发,非常欢迎进一步阅读该主题的提示

c++ qt constructor explicit qdialog

4
推荐指数
1
解决办法
1322
查看次数

如何在新线程(QThread)中使用进程(QProcess)?

我有以下代码:

 void Processmethod()
{

    QDialog *ProcessMessage = new QDialog;      
    Ui::DialogProcessMessage Dialog;            
    Dialog.setupUi(ProcessMessage);             
    ProcessMessage->setModal(true);
    ProcessMessage->setAttribute(Qt::WA_DeleteOnClose); 
    ProcessMessage->show();

    qApp->processEvents();

    processmethodONE();  
    processmethodTWO();
    processmethodTHREE();                  
}

void processmethodONE()
{
    QString ProcessCommand = "w8 " + blablubli";            

    Prozess.setWorkingDirectory(Path);         //QProcess "Prozess" is globaly defined  
    Prozess.setStandardOutputFile(Path);       //in my class

    QThread* thread = new QThread;
    Prozess.moveToThread(thread);
    Prozess.start(ProcessCommand);


while(!Prozess.waitForFinished(2000))
   {
       std::cerr << "Process running " << std::endl;
   }

QProcess::ExitStatus Status = Prozess.exitStatus(); 

if (Status == 0)
 {
   std::cout << "File created!" << std::endl;
 }
}
Run Code Online (Sandbox Code Playgroud)

在此源代码中,我尝试在某些进程启动之前打开一个弹出对话框。问题是对话框不可点击,但在对话框上我想创建一个按钮来中止正在运行的方法。如您所见,我尝试使用 QThread 在另一个线程中运行进程,但仍然无法单击该对话框。此外,如果我使用“application/x-executable”文件打开我的应用程序(GUI),则在激活上述方法时会丢失对话框内容。我该如何解决这些问题?我哪里错了?你好

c++ qt qprocess qdialog qthread

4
推荐指数
1
解决办法
1万
查看次数

一个阻塞但非模态的QDialog?

我有一堆图像,我想在其上执行一些操作.处理完每个图像后,我的程序会弹出一个对话框,提示用户是否要继续下一个图像或中止.在此之前,他们应该有机会对图像或参数进行一些手动更改.无论如何,他们必须能够访问应用程序的窗口,同时应该阻止执行调用对话框的方法,直到关闭对话框.

我尝试使用QMessageBox解决这个问题,但如果我通过exec()打开它,它会阻止整个应用程序,如果我使用show(),程序的执行将继续,而不会等待用户的反应.

有没有一种方便的方法来阻止调用方法或函数与对话框,但允许用户与其他窗口进行交互?

提前感谢任何提示.

c++ qt modal-dialog qdialog qmessagebox

4
推荐指数
1
解决办法
1209
查看次数

如何在运行时更改QDialog的模态?

我有一个QDialog,我读了很多关于show(),exec()和open()的差异.不幸的是,我从来没有找到一个解决方案来改变运行时对话框的模态.我有一个应用程序,从那里我的QDialog启动.我在这个对话框中有一个切换按钮,点击它,QDialog应该改变模态,这样就可以与应用程序进行交互 - 但这不应该一直发生 - 只要选中切换按钮.

有可能吗?我无法解决设置setModal(true/false)的问题,这只是允许我启动它模态,切换按钮并将其设置为非模态,但后来我不能回到模态.

这里有一些代码:

启动对话框:

从主窗口:

_dialog = new ToggleModalDialog(this, id, this);
_dialog->setWindowModality(Qt::ApplicationModal);
_dialog->open();
Run Code Online (Sandbox Code Playgroud)

这里是ToggleModalDialog中的切换槽

void ToggleModalDialog::changeModality(bool checkState)
{
    if(checkState)
    {
        this->setWindowModality(Qt::NonModal);
        ui->changeModalityButton->setChecked(true);
        this->setModal(false);
    }
    else
    {
        this->setWindowModality(Qt::ApplicationModal);
        ui->changeModalityButton->setChecked(true);
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢!

c++ qt qdialog modality

4
推荐指数
1
解决办法
9127
查看次数

QDialogBu​​ttonBox 按钮没有响应

当我运行以下函数时,对话框显示所有内容。问题是按钮无法连接。OK 和 Cancel 不响应鼠标点击。

void MainWindow::initializeBOX(){

        QDialog dlg;
        QVBoxLayout la(&dlg);
        QLineEdit ed;
        la.addWidget(&ed);


        //QDialogButtonBox bb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
        //btnbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
         QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |     QDialogButtonBox::Cancel);

         connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
         connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

         la.addWidget(buttonBox);
         dlg.setLayout(&la);


        if(dlg.exec() == QDialog::Accepted)
        {
            mTabWidget->setTabText(0, ed.text());
        }

      }
Run Code Online (Sandbox Code Playgroud)

在运行时,cmd 中的错误显示:没有像 accept() 和 reject() 这样的插槽。

c++ qt signals-slots qdialog qt-designer

4
推荐指数
1
解决办法
7353
查看次数

QDialog删除标题栏

网络上充斥着类似的问题,但是对于我来说,没有什么适合解决当前问题的方法。

在我的QT-C ++应用程序中,我有一个带有某些功能的主窗口形式,有一个QPushButton,按此按钮可以打开QDialog。现在,表单中的所有功能都可以正常工作,但是我希望最终的应用程序没有任何顶部标题栏。即没有关闭/最小化/最大化按钮。

在我的main.cpp文件中

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    w.show();
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

结果,主窗口变为-

在此处输入图片说明

对于dialog.cpp窗口,我设置了-

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //QDialog Dialog(0, Qt::CustomizeWindowHint|Qt::WindowTitleHint);  --- used this also; no use

    QDialog Dialog(0, Qt::FramelessWindowHint | Qt::Dialog);
Run Code Online (Sandbox Code Playgroud)

但是QDialog的标题栏仍然保留,看起来像-

在此处输入图片说明

我要去哪里错了?关于如何删除关闭按钮和标题栏的任何想法?

c++ qt4 qdialog

4
推荐指数
2
解决办法
1万
查看次数

如何以编程方式关闭QMenu

我有非常具体的情况.我想QAction进入QToolbar并达到以下行为:

  1. QAction可用图标查看.
  2. 右侧的经典箭头,用于显示菜单
  3. 按下此箭头我QDialog应该出现在屏幕上而不是QMenu像一个

Now I'm a bit confused with implementing all this things together.

For now I've created QAction added it to toolbar and also created an empty QMenubecause I didn't get the idea of how to add the "dropdown" arrow another way.
So, I also connected my slot to QMenu aboutToShow() signal and now, I can create my dialog and exec() it just before QMenu shows. But here's …

user-interface qt qdialog qmenu

4
推荐指数
1
解决办法
1292
查看次数

直接从UI文件加载QDialog吗?

我使用QT Designer并使用它创建我的GUI。要启动主程序,我使用以下代码:

import sys
from PyQt4 import uic, QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *

try:
    _fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:
    def _fromUtf8(s):
    return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

def main():
    app = QtGui.QApplication(sys.argv)
    myWindow = MyWindowClass()
    myWindow.show()
    app.exec_()

main_dialog = uic.loadUiType("GUI.ui")[0]

class MyWindowClass(QtGui.QMainWindow, main_dialog):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.setupUi(self)

if __name__ == "__main__": 
    main()
Run Code Online (Sandbox Code Playgroud)

因此,在这一行中,main_dialog …

python qdialog pyqt4 python-2.7

4
推荐指数
1
解决办法
1366
查看次数

圆角的QDialog有黑角而不是半透明

我需要创建一个带有圆角半透明角的QDialog 。问题是这样做时,角是半透明的,但以某种方式被窗口的 alpha 属性填充,使其变黑(这是我对问题原因的理解)

在此输入图像描述

清晰可见的是圆形边缘,但有某种黑色的“背景”。QThread确认一下,此对话框是由from启动的模式对话框QMainWindow它不是父窗口

QDialog(根)组件的 CSS是:

QDialog {
    background-color: rgba(250, 250, 250, 255);
    border-radius: 30px;
    color: #3C3C3C;
}
Run Code Online (Sandbox Code Playgroud)

组件布局如下所示

在此输入图像描述

我也添加了阴影效果QDialog。这是构造函数代码QDialog

UpdateDialog::UpdateDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::UpdateDialog)
{
    ui->setupUi(this);

    setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
    QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
    effect->setBlurRadius(5);
    this->setGraphicsEffect(effect);
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,父级QMainWindow在其构造函数中设置了以下属性

ui->setupUi(this);
statusBar()->hide();
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground, true);

// Set rounded corners style
setStyleSheet("QMainWindow {\n  background-color:rgba(240,240,240,255);\n   border-radius: 30px;\n}\n\nQDialog {\n    border-radius: 30px;\n}");

// Add shadow to main window …
Run Code Online (Sandbox Code Playgroud)

qt qwidget qdialog

4
推荐指数
1
解决办法
6385
查看次数