标签: qdialog

PyQt:让小部件在QDialog中自动调整大小

当对话框本身调整大小时,我很难在自动调整QDialog中获取小部件.

在以下程序中,如果您调整主窗口的大小,textarea会自动调整大小.但是,在调整对话框大小时,对话框中的textarea保持相同的大小.

有没有办法让对话框中的textarea自动调整大小?我尝试过使用setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)对话框本身和内部的两个小部件,但这似乎没有任何效果.

我在openSuSE 10.2上使用Qt版本3.3.7和PyQt版本3.5.5-29,如果这是相关的.

import sys
from qt import *

# The numbers 1 to 1000 as a string.
NUMBERS = ("%d " * 1000) % (tuple(range(1,1001)))

# Add a textarea containing the numbers 1 to 1000 to the given
# QWidget.
def addTextArea(parent, size):
    textbox = QTextEdit(parent)
    textbox.setReadOnly(True)
    textbox.setMinimumSize(QSize(size, size*0.75))
    textbox.setText(NUMBERS)


class TestDialog(QDialog):
    def __init__(self,parent=None):
        QDialog.__init__(self,parent)
        self.setCaption("Dialog")
        everything = QVBox(self)

        addTextArea(everything, 400)
        everything.resize(everything.sizeHint())


class TestMainWindow(QMainWindow):
    def __init__(self,parent=None):
        QMainWindow.__init__(self,parent)
        self.setCaption("Main Window")
        everything = QVBox(self)

        addTextArea(everything, 800) …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt qdialog

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

Qt设计师 - 如何创建QDialog?

有可能在Qt-creator中创建QDialog,例如QForm(通过点击)?我找到了几个样本,但QDialog是以编程方式创建的.我想在QDialog上拖放按钮,listview和其他组件.现在我只能通过修改代码来添加新组件.

谢谢

qdialog qt-creator

8
推荐指数
2
解决办法
4610
查看次数

如何从QDialog返回数据?

我正在尝试设计一个主窗口和一个QDialog,并找到从a返回数据的最佳方法QDialog.

现在我正在捕捉accepted()来自对话框的信号,之后我调用了返回数据的对话框函数.有没有更好的方法?

这是我现在的工作代码:

class MainWindow : public QMainWindow
{
// ...

public slots:
    void showDialog()
    {
        if (!myDialog)
        {
            myDialog = new Dialog();
            connect(myDialog, SIGNAL(accepted()), this, SLOT(GetDialogOutput()));
        }
        myDialog->show();
    }
    void GetDialogOutput()
    {
        bool Opt1, Opt2, Opt3;
        myDialog->GetOptions(Opt1, Opt2, Opt3);
        DoSomethingWithThoseBooleans (Opt1, Opt2, Opt3);
    }

private:
    void DoSomethingWithThoseBooleans (bool Opt1, bool Opt2, bool Opt3);
    Dialog * myDialog;

};
Run Code Online (Sandbox Code Playgroud)

对话:

class Dialog : public QDialog
{
// ...

public:
    void GetOptions (bool & Opt1, bool & Opt2, …
Run Code Online (Sandbox Code Playgroud)

c++ oop qt qdialog

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

如何在Qt中显示一个窗口并在关闭后立即将其删除?

作为一个非常简单的例子,我想在按下按钮时在Qt中显示一个对话框.通常的模式(在我目前正在处理的应用程序中)似乎如下:

class MainWindow {
  ...
private slots:
  buttonClicked();
  ...
private:
  ChildWindow * childWindow;
}

MainWindow::MainWindow(QWidget * parent) : QWidget(parent) {
  ...
  childWindow = new ChildWindow(this);
  ...
}

MainWindow::buttonClicked() {
  childWindow.show();
}
Run Code Online (Sandbox Code Playgroud)

来自.NET和Windows Forms(因为我不需要从类中的其他地方访问该对象),我更熟悉以下模式:

button1_Clicked(object sender, EventArgs e) {
  ChildWindow f = new ChildWindow();
  f.Show();
}
Run Code Online (Sandbox Code Playgroud)

局部变量意味着我没有另一个实例字段,并且窗口不会在内存中停留超过必要的时间.将它直接翻译成C++会有点难看,因为没有人会事后清理.我尝试了以下事项:

  1. shared_ptr.没有运气,delete一旦方法结束就会出现窗口,这意味着新窗口会在一瞬间出现并再次消失.不太好.

  2. exec()而不是show().这适用于模态对话框,但文档似乎暗示它也会停止事件循环,QApplication::processEvents()如果仍需要更新,则应定期调用.我在这里的理解不多,但我想这也不太好.

  3. deleteLater().可悲的是,只是显示一个窗口不会阻止deleteLater所以它一出现就会消失.

当我关闭它时,窗口后清理是否有一个很好的选择?

qt qdialog

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

PyQt QDialog - 返回一个值并从对话框中关闭

我正在使用PyQt中的用户界面,我在尝试使用QDialog时遇到了一些问题.基本上我有一个主要的小部件和一个子小部件,保存在单独的.py文件中; 当我点击主窗口小部件中的某个按钮时,我希望打开子窗口小部件.这似乎开得很好.

问题在于返回和关闭.我的子窗口小部件上有一个"提交"按钮 - 当用户单击此按钮时,我想将一个值(由其输入创建的字典)返回到主窗口小部件,然后关闭子窗口小部件.我似乎无法用我现在的代码做这些事情.

主窗口小部件中适用的代码位(如果问题不明显,可以添加更多代码以使其自包含):

import SGROIWidget_ui

def retranslateUi(self, ROIGUI):
    #ShowGroupROI is a push-button
    self.ShowGroupROI.clicked.connect(self.ShowGroupROIFunction)

def ShowGroupROIFunction(self):
    dialog = QDialog()
    dialog.ui = SGROIWidget_ui.Ui_ShowGroupWidget()
    dialog.ui.setupUi(dialog)
    dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    if dialog.exec_():
        roiGroups=dialog.Submitclose()
        print(roiGroups)
        dialog.accept()
Run Code Online (Sandbox Code Playgroud)

我似乎永远不会在if语句之后命中代码.

来自我的子窗口小部件的适用代码(此处将包含更多内容):

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)

class Ui_ShowGroupWidget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)

    def setupUi(self, ShowGroupWidget):
        #sets up Submit button

    def …
Run Code Online (Sandbox Code Playgroud)

python user-interface qt pyqt qdialog

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

如何根据其中一个孩子的文本长度自动调整QDialog的大小?

我有一个QDialog与我合作的人.它有点像一个QMessageBox.我注意到QMessageBox(的标签大小)的大小取决于显示的消息的大小.

如何QDialog自动调整我的调整大小QMessageBox?目前我的QDialog包含一个按钮框和一个标签,并且QDialog布局是垂直的.

(我知道我可以直接使用消息框但最终会有更复杂的对话框.)

qt nokia qdialog

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

如何捕获pyqt closeEvent并最小化对话框而不是退出?

我有一个QDialog对象.当用户单击X按钮或按下时Ctrl+Q,我希望对话框转到最小化视图或系统托盘图标,而不是关闭.我怎么做?

python pyqt qdialog pyqt4

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

如何在我的应用程序级别始终使对话框窗口始终位于最前面

如何使Qt对话框窗口始终位于应用程序级别的顶部?

我想使对话框窗口始终位于最前面,但请记住始终在应用程序级别位于最前面,即使单击空白处,我也希望它仅位于应用程序的最前面。

我尝试使用setWindowFlags(Qt::WindowStaysOnTopHint),但这使对话框窗口始终位于桌面级别的顶部,但是我希望它仅位于应用程序级别的顶部。

我怎样才能做到这一点?

c++ qt qdialog always-on-top qt5

7
推荐指数
1
解决办法
3554
查看次数

如何关闭 QDialog

我一直在尝试关闭从主窗口分支出来的 QDialog 窗口。到目前为止,以下内容对我不起作用:

self.close()
QDialog.close()
Run Code Online (Sandbox Code Playgroud)

我尝试了其他命令,例如exitexec_()没有运气。我得到的最常见的错误是

[className] 对象没有属性“关闭”

# Creating our window
class Ui_MainWindow(object):

    # Sets up GUI
    def setupUi(self, MainWindow):

        [GUI CODE]      

    # Sets text for parts of GUI
    def retranslateUi(self, MainWindow):

        [MORE GUI CODE]

    # Function handling screencap on click and metadata for filenames
    def cap_on_Click(arg1,arg2):

        popup = QDialog()
        popup_ui = Ui_Dialog()
        popup_ui.setupUi(popup)
        popup.show()
        sys.exit(popup.exec_())
Run Code Online (Sandbox Code Playgroud)

上面是我的主窗口

class Ui_Dialog(object):

    def setupUi(self, Dialog):

        [GUI CODE]

    def retranslateUi(self, Dialog):

        [MORE GUI CODE]

    def button_click(self, arg1):

        self.close()
Run Code Online (Sandbox Code Playgroud)

第二个块是对话窗口代码。如何关闭此对话窗口?

python user-interface qt pyqt qdialog

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

如何在不更改条目索引的情况下隐藏 QTableWidget 的一行?

我在 QDialog 中有一个带有 7 列的 QTableWidget,其中每一行都有有关特定目录中文件的信息。使用一些复选框、lineedits 等,我希望能够仅显示具有特定文本的文件,我可以在 lineEdit 中手动添加。

是否可以以某种方式检查每一行,如果它包含 lineEdit-text 并且不隐藏该行(不更改其他行的任何索引,我不必隐藏)?

qt qdialog qtablewidget qlineedit qt5

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