Hi all
I have QTextEdit in mainWindow. I'm trying to resize QTextEdit so height = mainwindow.height and width = height/2. That should change when I change the size of mainWindow during runtime.
How can I do that?
Hi all
I have QTextEdit in mainWindow. I'm trying to resize QTextEdit so height = mainwindow.height and width = height/2. That should change when I change the size of mainWindow during runtime.
How can I do that?
If you mean "QMainWindow" and you have called QMainWindow::setCentralWidget( textEdit ), then the main window will automatically resize the text edit to be the same size as its central area. Are you saying that you want the text edit to be a different size from the main window?
<=== The Great Pumpkin says ===>
Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.
it's ok I've fixed it using this code:
void MainWindow::resizeEvent(QResizeEvent *)
{
ui->textEdit->resize(width()/2,height());
}
you should really be doing this with a http://doc.qt.io/qt-4.8/QVBoxLayout and using a spacer to keep the bottom half empty
If you have a problem, CUT and PASTE your code. Do not retype or simplify it. Give a COMPLETE and COMPILABLE example of your problem. Otherwise we are all guessing the problem from a fabrication where relevant details are often missing.
Since you haven't posted any code other than a resize event, it is pretty tough to compare, isn't it?that's not the point, compare my code with yours and you'll see what I'm talking about.
The point is, if you are using a QMainWindow and you aren't using a central widget with a layout to control the relative sizes and positions of the child widgets inside it, then you are doing it wrong. If you are simply making child widgets and manually positioning and sizing them inside a QMainWindow parent, then you are doing it wrong. The comments you have made seem to imply that this is exactly what your code does.
The purpose of this forum is to help people solve Qt problems and become better Qt programmers. If you argue with the people who post answers and continue to do things wrong, you won't get better.
Last edited by d_stranz; 3rd September 2012 at 18:51.
<=== The Great Pumpkin says ===>
Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.
I'm sorry if I insulted you, that was not my intention. How would you solve this problem. I'm using this code:
void MainWindow::resizeEvent(QResizeEvent *)
{
ui->textEdit->resize(width()/2,height());
}
and it works perfectly. If there is better way for doing this, then I would like to know about it.
It may work, but from what you have previously said, your implementation of the main window content and layout does not appear to be correct. Show the code for your main window constructor, and we'll be happy to tell you what is wrong with it, if anything.
Read the documentation on QMainWindow (especially the section titled Qt Main Window Framework) and the QMainWindow::setCentralWidget() method. If you aren't following these instructions, then you are doing it wrong and even though your resize code might work, the fact that your layout is wrong is likely causing other problems inside the QMainWindow machinery.
So post the UI file for your main window class, and show what you are doing in the constructor.
here is UI file:
Qt Code:
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>693</width> <height>461</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="windowTitle"> <string>BPad</string> </property> <property name="styleSheet"> <string notr="true"/> </property> <widget class="QWidget" name="centralWidget"> <property name="contextMenuPolicy"> <enum>Qt::NoContextMenu</enum> </property> <widget class="QLineEdit" name="lineEdit"> <property name="geometry"> <rect> <x>534</x> <y>193</y> <width>129</width> <height>26</height> </rect> </property> <property name="maximumSize"> <size> <width>150</width> <height>16777215</height> </size> </property> <property name="styleSheet"> <string notr="true">border: 3px solid gray; border-color: rgb(85, 170, 255); border-radius: 9px;</string> </property> </widget> <widget class="QFrame" name="frame"> <property name="geometry"> <rect> <x>70</x> <y>30</y> <width>461</width> <height>291</height> </rect> </property> <property name="styleSheet"> <string notr="true">background-image: url(:/new/prefix1/21112009121.jpg);</string> </property> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> </property> <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> <widget class="QTextEdit" name="textEdit"> <property name="geometry"> <rect> <x>120</x> <y>20</y> <width>256</width> <height>192</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="styleSheet"> <string notr="true">background-image: url(:/new/prefix1/old-paper.jpg); border: 4px solid gray; </string> </property> </widget> </widget> </widget> <widget class="QMenuBar" name="menuBar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>693</width> <height>26</height> </rect> </property> <widget class="QMenu" name="menuFile"> <property name="title"> <string>File</string> </property> <addaction name="actionNew"/> <addaction name="actionOpen"/> <addaction name="separator"/> <addaction name="actionSave"/> <addaction name="actionSave_as"/> <addaction name="separator"/> <addaction name="actionExit"/> </widget> <widget class="QMenu" name="menuEdit"> <property name="title"> <string>Edit</string> </property> <addaction name="actionCut"/> <addaction name="actionCopy"/> <addaction name="actionPaste"/> <addaction name="separator"/> <addaction name="actionUndo"/> <addaction name="actionRedo"/> <addaction name="separator"/> <addaction name="actionFont"/> </widget> <widget class="QMenu" name="menuHelp"> <property name="title"> <string>Help</string> </property> <addaction name="actionAbout"/> </widget> <widget class="QMenu" name="menuFind"> <property name="title"> <string>Find</string> </property> <addaction name="actionFind_and_replace"/> </widget> <addaction name="menuFile"/> <addaction name="menuEdit"/> <addaction name="menuFind"/> <addaction name="menuHelp"/> </widget> <widget class="QStatusBar" name="statusBar"/> <action name="actionNew"> <property name="text"> <string>New</string> </property> <property name="shortcut"> <string>Ctrl+N</string> </property> </action> <action name="actionOpen"> <property name="text"> <string>Open</string> </property> <property name="shortcut"> <string>Ctrl+O</string> </property> </action> <action name="actionSave"> <property name="text"> <string>Save</string> </property> <property name="shortcut"> <string>Ctrl+S</string> </property> </action> <action name="actionSave_as"> <property name="text"> <string>Save as</string> </property> </action> <action name="actionExit"> <property name="text"> <string>Exit</string> </property> <property name="shortcut"> <string>Ctrl+Q</string> </property> </action> <action name="actionCut"> <property name="text"> <string>Cut</string> </property> <property name="shortcut"> <string>Ctrl+X</string> </property> </action> <action name="actionCopy"> <property name="text"> <string>Copy</string> </property> <property name="shortcut"> <string>Ctrl+C</string> </property> </action> <action name="actionPaste"> <property name="text"> <string>Paste</string> </property> <property name="shortcut"> <string>Ctrl+V</string> </property> </action> <action name="actionUndo"> <property name="text"> <string>Undo</string> </property> <property name="shortcut"> <string>Ctrl+Y</string> </property> </action> <action name="actionRedo"> <property name="text"> <string>Redo</string> </property> <property name="shortcut"> <string>Ctrl+Z</string> </property> </action> <action name="actionAbout"> <property name="text"> <string>About</string> </property> </action> <action name="actionFind_and_replace"> <property name="text"> <string>Find and replace</string> </property> <property name="shortcut"> <string>Ctrl+F</string> </property> </action> <action name="actionFont"> <property name="text"> <string>Font</string> </property> </action> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui>To copy to clipboard, switch view to plain text mode
No, it looks like you aren't doing it right. Even though you are creating a QWidget called "centralWidget", it isn't what the QMainWindow expects as the central widget. You aren't using layouts anywhere, which would allow the main window to move and resize the widgets inside it as it resizes, and you would not have to do anything in a resize event. Your code creates a lot of extra work for you - every time something changes in your GUI, you might have to rewrite all of the resize code instead of letting the main window and layouts manage all that for you.
So technically, you can do what you're doing, but from an efficiency point of view, you aren't letting Qt do one of the things it does best.
If you are making the transition from the Windows / MFC world into Qt, this is understandable, because MFC has no concept of layouts (at least not at the time I stopped using it 5 years ago), and you did have to manage all of the GUI resizing yourself.
I tried to achieve this using layout but I coudn't arrange things to meet my needs. Can you tell me how to achieve this using layout.
Ah, I think a few video tutorial about layout with Qt Designer will be good for you. Have you search it on youtube?
~ We are nothing in this universe ~
OK, here's your GUI with layouts. If you resize your original UI inside of Qt Designer, none of the widgets move, so I have specified that most of the spacers have fixed geometry. This keeps the QFrame in the same location no matter what the size of the QMainWindow. If this isn't what you want, then you can change their size policy from Fixed to something else. You can also look at setting the stretch factors for the widgets and spacers so that resize occurs in the proportions you want. Be sure to comment out your own resize code so you can see what the layout itself is doing.
alenn.ui
really nice work man, thank you.
No problem. Sorry if I sounded a bit hard in some of the earlier posts, but I have found from lots of bashing my head on the wall that if you learn how to do things right, Qt will be really good to you and will save you a lot of work. The Qt trolls have spent a lot of effort to make GUI design and use easy because all the hard stuff is being done internally.
alenn.masic (6th September 2012)
Bookmarks