Results 1 to 14 of 14

Thread: Delayed Rendering of QTabWidget Tabs

  1. #1
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Question Delayed Rendering of QTabWidget Tabs

    Greetings,

    I have a dialog containing 4 tabs. Each tab displays a form created by Qt Designer. In the constructor of each widget that is drawn on a tab, I call
    Qt Code:
    1. ui.setupUi( this )
    To copy to clipboard, switch view to plain text mode 
    which appears to draw the form on the tab widget. I would like to delay the rendering of the non-visible forms until their tab has been selected. Does anyone know if this is possible and if so, how?

    I have tried delaying the call to ui.setupUi() until its tab is selected, but then the form is not drawn. Only if ui.setupUi() is called in the constructor is the form visible when the tab is selected.

    Background:
    My application connects to hardware on the network and must ACK each device every 600ms to keep the device connected. When there are a large number of devices online (~250) the cost of drawing all the complicated forms in the dialog starves the thread that is doing the ACK and the devices must reconnect. My thinking is that if I can delay rendering the forms that are not visible I can keep the devices active without impacting performance of the UI.

  2. #2
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: Delayed Rendering of QTabWidget Tabs

    setupUi doesn't do any drawing. It only creates parent-child relationship between widgets. Your widgets will be drawn for the first time when their tab index is being activated. When they are not visible, they will not be drawn at all.

    If you delay setupUi(), you have to manualy call show() on the widget.

    If you experience slowdowns, they are probably not due to expensive rendering.

  3. The following user says thank you to wysota for this useful post:

    mclark (7th May 2007)

  4. #3
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Unhappy Re: Delayed Rendering of QTabWidget Tabs

    I'm not sure how show() is to be called when delaying the call to setupUi().

    When a tab is selected I tried:
    Qt Code:
    1. if ( !m_tabACN_Ports->m_bIsInitialized )
    2. {
    3. m_tabACN_Ports->InitializeTabUI();
    4. m_tabACN_Ports->show();
    5. }
    To copy to clipboard, switch view to plain text mode 

    Qt Code:
    1. void ACNPortsTab::InitializeTabUI( void )
    2. {
    3. ui.setupUi( this );
    4.  
    5. // Set field values from online ACN Gateway map
    6. ui.userNameLabel->setText( m_parent->m_sName );
    7. ui.ipLbl->setText( m_pNode->GetIPAddr() );
    8.  
    9. . . .
    To copy to clipboard, switch view to plain text mode 
    The ACNPortsTab is defined as:
    Qt Code:
    1. class ACNPortsTab : public QWidget
    To copy to clipboard, switch view to plain text mode 

    I still get nothing on the tab unless I call setupUi() in the constructor.

    The slowdown we're seeing is seen when the dialog is started. After all devices have been connected, the processor is idling (just sending ACKs to the devices). When the edit dialog is started the processor spikes and devices start dropping. This is why I'm trying everything to separate the parts of the dialog startup.

  5. #4
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: Delayed Rendering of QTabWidget Tabs

    Quote Originally Posted by mclark View Post
    I'm not sure how show() is to be called when delaying the call to setupUi().
    Qt Code:
    1. void ACNPortsTab::InitializeTabUI( void )
    2. {
    3. ui.setupUi( this );
    4.  
    5. // Set field values from online ACN Gateway map
    6. ui.userNameLabel->setText( m_parent->m_sName );
    7. ui.ipLbl->setText( m_pNode->GetIPAddr() );
    8. show(); // <-- here
    To copy to clipboard, switch view to plain text mode 


    The slowdown we're seeing is seen when the dialog is started. After all devices have been connected, the processor is idling (just sending ACKs to the devices). When the edit dialog is started the processor spikes and devices start dropping. This is why I'm trying everything to separate the parts of the dialog startup.
    I'm still convinced paint events are not delivered to hidden widgets. If you don't believe me, install an event filter on your child tabs and scan for QEvent::Paint and QEvent::Show. Your slowdown is probably caused by the constructor or incorrect handling of the connection between the widget and the device behind it. I suggest using a profiler like gprof or cachegrind (or other, depending on the platform you use) to find the bottleneck instead of shooting blind.

  6. #5
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    wysota, thanks for taking time to think about this.. You are correct that I need to run this code through a profiler. I'm currently looking for an appropriate one while our IT department drags its heels doing the same thing

    While I suspected that the rendering was done on an as needed basis, as you suggest, I was instructed to try to separate the initialization from the rendering. I'll just wait until the profiler issue is resolved and this will show where the bottleneck actually is.

    Although I suspect there are other forces at work here (not just the drawing) the show() suggestion doesn't work for me.

    I tried a separate call to show() after initialization call (the one that calls ui.setupUi()); the tab was blank. I then moved the show() to the end of the initialization function with the same result, blank tab. Since profiling is what's really needed here I'll just work on some other 'highest priority' problem .

    -m-

  7. #6
    Join Date
    Feb 2006
    Location
    Romania
    Posts
    2,744
    Thanks
    8
    Thanked 541 Times in 521 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    Why don't you start with all the forms hidden, and show only the one in the active tab?
    Wysota is right - if a widget is hidden it will receive no update/resize events.

    Whenever you select another tab you show the current form and hide the others.

    And another thing: Do you update the contents of any widgets( list views, tables, etc ) in the forms somehow? From another thread or from the corresponding device(s) maybe?.

    Because even if they are hidden or not their contents will be updated. This could have an impact on performance too.

    How many widgets does one of those forms contains anyway? Are there many layouts involved( relayouting could take a long time on complex configurations )?

    Regards

  8. #7
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,359
    Thanks
    3
    Thanked 5,015 Times in 4,792 Posts
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Wiki edits
    10

    Default Re: Delayed Rendering of QTabWidget Tabs

    If you could show us the constructor and paint event (if overriden) of the widgets in question, maybe we could help you solve the issue without waiting for your IT departament.

  9. #8
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    Thank you for trying to help a Qt novice with this problem. I've learned a lot from this forum already.

    I don't override the paint event, although we ARE using the Arthur style.

    The classes are defined as such:
    Qt Code:
    1. class EditTabWidget : public QTabWidget
    2. {
    3. public:
    4. EditTabWidget( QWidget *pParent = 0 ) : QTabWidget( pParent )
    5. {
    6. // Only change the background color of the selected tab
    7. QPalette pal = tabBar()->palette();
    8. pal.setColor( QPalette::Base, COLOR_ManageBkg );
    9. tabBar()->setPalette( pal );
    10. }
    11. }; // class EditTabWidget : public QTabWidget
    12.  
    13.  
    14. class ACNGenTab : public QWidget
    15. {
    16. Q_OBJECT
    17.  
    18. public:
    19. ACNGenTab( QWidget* pParent = 0 );
    20. void ApplyUpdates( void );
    21. void accept( void );
    22. void reject( void );
    23.  
    24. private slots:
    25. void on_nameEdt_editingFinished( void );
    26. void on_ipAddrEdt_textChanged( const QString& sIP );
    27. void on_subnetMaskEdt_textChanged( const QString& sIP );
    28. void on_defIPEdt_textChanged( const QString& sIP );
    29. void on_tftpSrvrIPEdt_textChanged( const QString& sIP );
    30. void on_dynamicRadBtn_toggled( bool bState );
    31. void on_staticRadBtn_toggled( bool bState );
    32. void on_editIPBtn_clicked( void );
    33. void on_resetBtn_clicked( void );
    34. void on_identifyBtn_clicked( void );
    35. void on_dwnldBtn_clicked( void );
    36. void on_rebootBtn_clicked( void );
    37. void on_clearBtn_clicked( void );
    38.  
    39. protected:
    40. bool validateIPAddress( const QString& sIP );
    41.  
    42. public:
    43. Ui::ACNCfgGenDlg ui;
    44.  
    45. private:
    46. EditACNDlg * m_parent;
    47. CController * m_pController;
    48. CACNGateway * m_pNode;
    49.  
    50. }; // class ACNGenTab : public QWidget
    51.  
    52.  
    53. ///////////////////////////////////////////////////////////////////////////////
    54. // ACN Port Properties Tab Class
    55.  
    56. class ACNPortsTab : public QWidget
    57. {
    58. Q_OBJECT
    59.  
    60. public:
    61. ACNPortsTab( QWidget* pParent = 0 );
    62. void InitializeTabUI( void );
    63. void ApplyUpdates( void );
    64. void showPriorityDialog( int nPort );
    65. void showAIPDialog( int nPort );
    66. void accept( void );
    67. void reject( void );
    68.  
    69. protected:
    70. void ApplyPort1Updates( void );
    71. void ApplyPort2Updates( void );
    72. void ApplyPort3Updates( void );
    73. void ApplyPort4Updates( void );
    74.  
    75. private slots:
    76. // ... lots of slots to record and/or validate UI data changes
    77.  
    78. public:
    79. Ui::ACNCfgPortsDlg ui;
    80.  
    81. bool m_bIsInitialized;
    82.  
    83. private:
    84. EditACNDlg * m_parent;
    85. CController * m_pController;
    86. CACNGateway * m_pNode;
    87.  
    88. }; // class ACNPortsTab : public QWidget
    89.  
    90.  
    91. ///////////////////////////////////////////////////////////////////////////////
    92. // ACN AIP Properties Tab Class
    93.  
    94. class ACNAIPTab : public QWidget
    95. {
    96. Q_OBJECT
    97.  
    98. public:
    99. ACNAIPTab( CACNGateway* pNode, MainWin* pMainWin, QWidget* pParent = 0, int nPort = -1 );
    100.  
    101. void InitializeTabUI( void );
    102. int GetCurrentPort( void );
    103. QString GetUniverseNum( void );
    104.  
    105. QTableWidget* GetCurrentTable( void ) { return m_pCurrTable; }
    106.  
    107. void ApplyUpdates( void );
    108. void accept( void );
    109. void reject( void );
    110.  
    111. private slots:
    112. void on_copyBtn_clicked();
    113. void on_oneToOneBtn_clicked( void );
    114. void on_rangeBtn_clicked( void );
    115. void on_clearBtn_clicked( void );
    116. void portCboIdxChange( int nIndex );
    117. void on_aipChk_stateChanged( int nState );
    118.  
    119. void updateFreeChannelNum( void );
    120.  
    121. public:
    122. Ui::ACNAIPDlg ui;
    123.  
    124. MainWin* m_pMainWin;
    125. bool m_bIsInitialized;
    126.  
    127. private:
    128. EditACNDlg * m_parent;
    129. CController * m_pController;
    130. CACNGateway * m_pNode;
    131.  
    132. bool m_bOnline;
    133. int m_nPort;
    134. QTableWidget* m_pCurrTable;
    135. bool m_bPort1AIPEnabled;
    136. bool m_bPort2AIPEnabled;
    137. bool m_bPort3AIPEnabled;
    138. bool m_bPort4AIPEnabled;
    139.  
    140. }; // class ACNAIPTab : public QWidget
    141.  
    142.  
    143. ///////////////////////////////////////////////////////////////////////////////
    144. // ACN About Properties Tab Class
    145.  
    146. class ACNAboutTab : public QWidget
    147. {
    148. Q_OBJECT
    149.  
    150. public:
    151. ACNAboutTab( QWidget* pParent = 0 );
    152. void InitializeTabUI( void );
    153. void accept( void ) {}
    154. void reject( void ) {}
    155.  
    156. public:
    157. Ui::ACNCfgRODlg ui;
    158.  
    159. bool m_bIsInitialized;
    160.  
    161. private:
    162. EditACNDlg* m_parent;
    163.  
    164. }; // class ACNAboutTab : public QWidget
    165.  
    166.  
    167. ///////////////////////////////////////////////////////////////////////////////
    168.  
    169. ///////////////////////////////////////////////////////////////////////////////
    170. // Edit ACN Properties Class
    171.  
    172. class EditACNDlg : public QDialog
    173. {
    174. Q_OBJECT
    175.  
    176. public:
    177. EditACNDlg( MainWin* pMainWin, const int type, void* pData, bool bIsCfgTable,
    178. bool bAllowIPEdit, bool bOnlineUpdate = true, QWidget* pParent = 0 );
    179. virtual ~EditACNDlg();
    180.  
    181. // Return current values for Name, IPAddress and boundNode.
    182. void GetCellUpdates( QString& sName, QString& sIP,
    183. uint1& nP1Mode, uint1& nP2Mode, uint1& nP3Mode, uint1& nP4Mode,
    184. uint4& nP1Univ, uint4& nP2Univ, uint4& nP3Univ, uint4& nP4Univ );
    185.  
    186. private slots:
    187. void on_okPushButton_clicked() { accept(); }
    188. void on_cancelPushButton_clicked() { reject(); }
    189. void setFocusInTab( int nTabIndex );
    190.  
    191. public:
    192. MainWin * m_pMainWin;
    193. CController * m_pController;
    194. CACNGateway * m_pNode;
    195. bool m_bAllowIPEdit;
    196.  
    197. int m_devType;
    198. QString m_sName;
    199. QString m_sCID;
    200. QString m_sIPAddr;
    201. bool m_bIsDynamicIP;
    202. QString m_sSubnetMask;
    203. QString m_sTFTPIP;
    204.  
    205. // ...lots more data members
    206.  
    207. bool m_bOnlineUpdate;
    208. bool m_bIsCfgTable;
    209. bool m_bInitializing;
    210.  
    211. private:
    212. void accept( void );
    213. void reject( void );
    214.  
    215. Ui::EditPropsDlg ui;
    216.  
    217. EditTabWidget* m_tabWidget;
    218. ACNGenTab* m_tabACN_Gen;
    219. ACNPortsTab* m_tabACN_Ports;
    220. ACNAIPTab* m_tabACN_AIP;
    221. ACNAboutTab* m_tabACN_About;
    222.  
    223. }; // class EditACNDlg : public QDialog
    To copy to clipboard, switch view to plain text mode 

    This is the constructor of the dialog

    Qt Code:
    1. EditACNDlg::EditACNDlg( MainWin* pMainWin, const int type, void* pData,
    2. bool bIsCfgTable, bool bAllowIPEdit,
    3. bool bOnlineUpdate, QWidget* pParent ) : QDialog( pParent )
    4. {
    5. // Initialize class member variables
    6. m_pMainWin = pMainWin;
    7. m_pController = m_pMainWin->m_pController;
    8. m_devType = type;
    9. m_bOnlineUpdate = bOnlineUpdate;
    10. m_bAllowIPEdit = bAllowIPEdit;
    11. m_bIsCfgTable = bIsCfgTable;
    12. m_bInitializing = true;
    13.  
    14. m_pNode = reinterpret_cast<CACNGateway*>( pData );
    15. if ( m_pNode == NULL )
    16. return; // ERROR: device not found in online map
    17.  
    18. // Setup the dialog UI
    19. ui.setupUi( this );
    20. setFixedSize( 579, 641 );
    21.  
    22. // Setup the QTabWidget
    23. m_tabWidget = new EditTabWidget( this );
    24. m_tabWidget->setTabShape( QTabWidget::Triangular );
    25. m_tabWidget->setFixedSize( 560, 565 );
    26.  
    27. QPalette palette;
    28. palette.setColor( m_tabWidget->backgroundRole(), Qt::white );
    29. m_tabWidget->setPalette( palette );
    30.  
    31. connect( m_tabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( setFocusInTab( int ) ) );
    32.  
    33. // Setup the individual tab-specific widgets
    34. m_tabACN_Gen = new ACNGenTab( this );
    35. m_tabWidget->addTab( m_tabACN_Gen, tr(GENERAL_TAB.toAscii().data()) );
    36.  
    37. m_tabACN_Ports = new ACNPortsTab( this );
    38. m_tabWidget->addTab( m_tabACN_Ports, tr(PORTS_TAB.toAscii().data()) );
    39.  
    40. m_tabACN_AIP = new ACNAIPTab( m_pNode, m_pMainWin, this );
    41. m_tabWidget->addTab( m_tabACN_AIP, tr("AIP") );
    42.  
    43. if ( !m_bIsCfgTable )
    44. {
    45. m_tabACN_About = new ACNAboutTab( this );
    46. m_tabWidget->addTab( m_tabACN_About, tr(ABOUT_TAB.toAscii().data()) );
    47. }
    48.  
    49. // Layout the Dialog elements
    50. QVBoxLayout* mainLayout = new QVBoxLayout;
    51. mainLayout->addWidget( m_tabWidget );
    52. mainLayout->addSpacing( 70 ); // Force tabs to top of dialog
    53. setLayout( mainLayout );
    54. setWindowTitle( tr("DMX Gateway Configuration") );
    55.  
    56. // Set focus on 1st editable element on the first tab
    57. m_tabACN_Gen->ui.nameEdt->setFocus();
    58. m_tabACN_Gen->ui.nameEdt->setCursorPosition( 0 );
    59.  
    60. // Set the "What's This?" text
    61. m_tabWidget->setWhatsThis( WT_ACN_TAB );
    62. ui.okPushButton->setWhatsThis( WT_OK_BTN );
    63. ui.cancelPushButton->setWhatsThis( WT_CANCEL_BTN );
    64.  
    65. m_bInitializing = false;
    66.  
    67. } // EditACNDlg::EditACNDlg(
    To copy to clipboard, switch view to plain text mode 

    This is the constructor of one of the pages being drawn on a tab.

    Qt Code:
    1. ACNPortsTab::ACNPortsTab( QWidget* pParent ) : QWidget( /*pParent*/ )
    2. {
    3. m_parent = reinterpret_cast<EditACNDlg*>( pParent );
    4. m_bIsInitialized = false;
    5.  
    6. ui.setupUi( this );
    7.  
    8. InitializeTabUI(); // This call initializes UI elements & fills in data
    9.  
    10. } // ACNPortsTab::ACNPortsTab(
    To copy to clipboard, switch view to plain text mode 

    • marcel, I thought that by using QTabWidget all non-visible forms were hidden by default. The constructor would set up the ui elements (and maybe fill in data) but no drawing would occur until that tab was selected, no?
    • Previously I updated the form data in each particular forms' constructor. I now delay that until the form is selected the first time. This seems to make little noticable difference.
    • My most complicated form contains 50+ items (QLineEdit, QComboBox, QPushButton, QLabel).

    Thanks again for your help!

  10. #9
    Join Date
    Feb 2006
    Location
    Romania
    Posts
    2,744
    Thanks
    8
    Thanked 541 Times in 521 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    You can try setting the attribute WA_WState_ExplicitShowHide for the forms.
    Also, I recommend hiding the forms that are not visible( index > 0 ) immediately after creating them ( after calling new ).
    If you look at the QTabWidget + QStackedWidget + QStackedLayout +QLayout sources you can see that there are some things that are not done when an widget is not visible in the sense of isVisible - isHidden() is true.

    Setting that flag may help a bit, knowing that you show them manually and being sure that no one shows them before you call show().

    Apart from this, does the GUI thread controls the connections to those devices. If they are so many, perhaps it is a too heavy load on the thread. Have you thought creating a thread that manages the connections and updates the interface? This way the GUI thread would have more time to do it's "real" job.

    Regards

  11. #10
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    marcel, thanks for the hiding hints, I'll try them today.

    As for the device connections, they are maintained by a separate library. After the devices are discovered and connected our thread monitor shows very little activity ( all that's happening are ACKs to each device to keep the connection alive - which takes very little bandwidth ). The processor appears to be idling.

    When the edit dialog is invoked the processor spikes to between 80 and 100 percent which corresponds to the spike in the GUI thread. The app is being run on a test network with no other activity and the machine the app is running on is only running the app.

    While I may be weak in thread issues, even I can see that something I'm doing is causing the GUI thread to starve the other threads while drawing the dialog.

    BTW, there are similar issues when scrolling through the 200+ member QTableWidget. This particular table has 15 cells:
    • 1 containing an icon
    • 7 containing text
    • 1 hidden
    • 5 containing QComboBox derived objects
    • 1 containing a QPushButton derived object

    A couple cells have tooltips and one has a data pointer attached and some, at times, may be read-only. Could this be too much too handle when scrolling through a 200+ member table?

    Regards

  12. #11
    Join Date
    Feb 2006
    Location
    Romania
    Posts
    2,744
    Thanks
    8
    Thanked 541 Times in 521 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    Here's a crazy idea... that might just not work.
    When you start the thread(s) that maintain the connections, set a higher priority, like start( QThread::TimeCriticalPriority ) or start( QThread::HighestPriority ).

  13. #12
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    Not so crazy, Marcel. The guy that maintains those libraries has given me a version with increased thread priority. While it makes the response better, it doesn't entirely solve the problem.

  14. #13
    Join Date
    Feb 2006
    Location
    Romania
    Posts
    2,744
    Thanks
    8
    Thanked 541 Times in 521 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    Qt Code:
    1. m_tabACN_Gen = new ACNGenTab( this );
    2. m_tabWidget->addTab( m_tabACN_Gen, tr(GENERAL_TAB.toAscii().data()) );
    3.  
    4. m_tabACN_Ports = new ACNPortsTab( this );
    5. m_tabWidget->addTab( m_tabACN_Ports, tr(PORTS_TAB.toAscii().data()) );
    6.  
    7. m_tabACN_AIP = new ACNAIPTab( m_pNode, m_pMainWin, this );
    8. m_tabWidget->addTab( m_tabACN_AIP, tr("AIP") );
    To copy to clipboard, switch view to plain text mode 

    I just noticed this. You create the m_TabACN* forms with this as parent ( meaning the dialog ). But the parent should be m_tabWidget, otherwise the dialog wil lsend all kinds of events to the forms. You should really modify this.

    You can also try updatesEnabled( false ) on the forms after you create them . This wil make them not receive resize or paint events. You enable the updates just before making them visible.

  15. #14
    Join Date
    Aug 2006
    Location
    Madison, WI USA
    Posts
    153
    Thanks
    35
    Thanked 1 Time in 1 Post
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Delayed Rendering of QTabWidget Tabs

    It appears that the boosted priority background thread and Marcel's parenting suggestion (along with taking numerous closer looks at my code) has made things acceptable. Some of the drawing is a little sluggish but the devices don't regularly go offline now.

    wysota and marcel, thank's so much for your time!

Similar Threads

  1. QTabWidget with same tabs
    By Djony in forum Qt Programming
    Replies: 20
    Last Post: 24th December 2011, 12:20
  2. QTabWidget tab visibility
    By dcss-design in forum Qt Programming
    Replies: 2
    Last Post: 30th January 2007, 23:24
  3. Switching off all tabs in QTabWidget
    By Gopala Krishna in forum Qt Programming
    Replies: 7
    Last Post: 30th August 2006, 17:10
  4. Removing Tabs
    By NewGuy in forum Qt Programming
    Replies: 6
    Last Post: 22nd July 2006, 22:46

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.