How to launch a table with columns' names set as checkboxes' labels
-
wrote on 21 Sept 2013, 16:44 last edited by
Hi all
So i have a wizard and a mainwindow that launches after the wizard winds up. The mainwindow's central widget is currently disabled so i wanted it to launch a table with columns as soon as the finish button in the last page of the wizard is clicked. The columns to be launched should correspond to the checkboxes in one of the wizard's pages. Like when some of the checkboxes are checked the mainwindow should launch the table with the labels of those checkboxes as the columns' names. I hope you understand because i've tried posting the picture here but it didn't work. Can you guys help?? -
Hi,
One way you could do this is to add a getter to your wizard that would return a QStringList containing the checkboxes label and use it to create a QTableView which headers are set using that list.
Hope it helps
-
wrote on 22 Sept 2013, 14:51 last edited by
Can this work?
@
QStringList list = findChildren<QCheckBox>();//then use
setHeaderLabels(list);
//as a slot
@
Also, can disabled checked checkboxes be tested using isChecked?? -
No, it won't even compile. findChildren will return a QList<QCheckBox*> in this case.
Also, using findChildren like that doesn't go toward clean code. The wizard page containing the checkboxes should handle the QStringList creation since it knows the checkboxes. The wizard could then return the string list generated by the wizard page.
As for the test, AFAIK yes
-
wrote on 23 Sept 2013, 08:22 last edited by
So what function do i use to extract the checkboxes if the wizard page knows them??
-
Since you seem to have a fixed number of check boxes, just go trough them in the getter (either by having them as member variables, using findChildren etc..), check what you need about them and construct the string list based on your logic.
-
wrote on 24 Sept 2013, 07:34 last edited by
Ok about launching the mainwindow after the wizard winds up i did this:
@
int ConclusionPage::nextId() const
{
connect(this, SIGNAL(buttonClicked(QWizard::FinishButton)), window, SLOT(LaunchWidget()));
return -1;
}
@
to my conclusion page that contains the finish button, window is an object pointer to the class MainWindow. LaunchWidget() is a slot that enables the central widget which was previously set to launch a text edit for experimental purposes to see if it would work. LaunchWidget() is defined in the MainWindow and is called right after the constructor.But when i compile it returns this error:
@
C:\mystuff\maprojo\SkoolCalc\SkoolCalcWizard.cpp:312: error: no matching function for call to 'ConclusionPage::connect(const ConclusionPage* const, const char [38], MainWindow* const&, const char [16]) const'
@is there anything wrong with my implementation apart from the error??
-
wrote on 25 Sept 2013, 22:42 last edited by
any help anyone??
-
Your wizard should not know anything about your MainWindow, that creates a useless tight coupling. You should rather connect the finished signal from your wizard to the LaunchWidget slot in your MainWindow
-
wrote on 26 Sept 2013, 08:22 last edited by
By knowing about the mainwindow object do you mean not declaring it in the wizard header and imlplementation files?? Because AFAIK i have done what you've just written above apart from the wizard not knowing about the window which will need some more elaboration??
-
wrote on 26 Sept 2013, 08:25 last edited by
What is most common is this:
@
WizardLoadMapFile LoadMapWizard(this);LoadMapWizard.setFileName(FileName_str); if (LoadMapWizard.exec() == QDialog::Accepted) { this->m_NewFileName = LoadMapWizard.m_MapFileName; emit signal(m_NewFileName); // Just an example }
@
Where the WizardLoadMapFile is the QWizard inherited class that contains member variables holding the needed information that the mainWindow needs to construct the table (or something else) -
wrote on 26 Sept 2013, 08:49 last edited by
What about just launching the mainwindow with a textedit central widget just after the wizard button finish is clicked in the conclusion page. My mainwindow is set to launch a textedit for now for experimental purposes which is currently disabled, but i want to launch it once the conclusion page winds up??
-
wrote on 27 Sept 2013, 09:13 last edited by
Hello anyone??
-
wrote on 27 Sept 2013, 09:15 last edited by
[quote author="pkjag" date="1380273224"]Hello anyone??[/quote]
Practice some patiece please.
-
wrote on 29 Sept 2013, 20:09 last edited by
Hey Andre can you help me with this problem??
I've been going through it a lot and i'm kinda stuck!! -
wrote on 30 Sept 2013, 07:13 last edited by
To me, it is no so clear anymore what your actual problem is at the moment. SGaist gave you some valuable suggestions already. What did you do with those?
However, I doubt a stringlist is the best data structure for this purpose. What would be in the strings exactly? I guess you don't have an endless variety of columns you can display and populate. One the one hand it is inefficient to use strings to contain static names for columns, and on the other is is not a good idea to use translatable strings for application logic. So, if your set of possible columns is indeed limited, I'd simply make an enum for them and use a QFlags (or as QVector<ColumnEnum> if ordering is important) to communicate the columns to display.
-
wrote on 1 Oct 2013, 08:49 last edited by
That's sorted out. My problem now is launching the table in the mainwindow's central widget(it's currently set to disabled) immediately the finish button is clicked in the conclusion page of the wizard. The code above shows my attempt, but it apparently doesn't work!!
-
wrote on 4 Oct 2013, 13:18 last edited by
is anybody gonna answer this?
-
It doesn't and it's not the best design either.
Did you try the suggestion of Jeroentj@home ?
-
wrote on 4 Oct 2013, 16:52 last edited by
That's for collecting the checkboxes information about being clicked, what about for launching the actual table for experimental purposes say without the columns in the mainwindow, that's the main problem!
1/23