当对话框本身调整大小时,我很难在自动调整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) 有可能在Qt-creator中创建QDialog,例如QForm(通过点击)?我找到了几个样本,但QDialog是以编程方式创建的.我想在QDialog上拖放按钮,listview和其他组件.现在我只能通过修改代码来添加新组件.
谢谢
我正在尝试设计一个主窗口和一个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) 作为一个非常简单的例子,我想在按下按钮时在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++会有点难看,因为没有人会事后清理.我尝试了以下事项:
shared_ptr
.没有运气,delete
一旦方法结束就会出现窗口,这意味着新窗口会在一瞬间出现并再次消失.不太好.
exec()
而不是show()
.这适用于模态对话框,但文档似乎暗示它也会停止事件循环,QApplication::processEvents()
如果仍需要更新,则应定期调用.我在这里的理解不多,但我想这也不太好.
deleteLater()
.可悲的是,只是显示一个窗口不会阻止deleteLater
所以它一出现就会消失.
当我关闭它时,窗口后清理是否有一个很好的选择?
我正在使用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) 我有一个QDialog
与我合作的人.它有点像一个QMessageBox
.我注意到QMessageBox
(的标签大小)的大小取决于显示的消息的大小.
如何QDialog
自动调整我的调整大小QMessageBox
?目前我的QDialog
包含一个按钮框和一个标签,并且QDialog
布局是垂直的.
(我知道我可以直接使用消息框但最终会有更复杂的对话框.)
我有一个QDialog对象.当用户单击X
按钮或按下时Ctrl+Q
,我希望对话框转到最小化视图或系统托盘图标,而不是关闭.我怎么做?
如何使Qt对话框窗口始终位于应用程序级别的顶部?
我想使对话框窗口始终位于最前面,但请记住始终在应用程序级别位于最前面,即使单击空白处,我也希望它仅位于应用程序的最前面。
我尝试使用setWindowFlags(Qt::WindowStaysOnTopHint)
,但这使对话框窗口始终位于桌面级别的顶部,但是我希望它仅位于应用程序级别的顶部。
我怎样才能做到这一点?
我一直在尝试关闭从主窗口分支出来的 QDialog 窗口。到目前为止,以下内容对我不起作用:
self.close()
QDialog.close()
Run Code Online (Sandbox Code Playgroud)
我尝试了其他命令,例如exit
和exec_()
没有运气。我得到的最常见的错误是
[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)
第二个块是对话窗口代码。如何关闭此对话窗口?
我在 QDialog 中有一个带有 7 列的 QTableWidget,其中每一行都有有关特定目录中文件的信息。使用一些复选框、lineedits 等,我希望能够仅显示具有特定文本的文件,我可以在 lineEdit 中手动添加。
是否可以以某种方式检查每一行,如果它包含 lineEdit-text 并且不隐藏该行(不更改其他行的任何索引,我不必隐藏)?