Vade
Vade

Reputation: 2029

qt/c++ naming of variables dynamically

I am in the process of developing a html editor in Qt for one of my university assignments, and i am having a problem regarding naming of some variables.

the problem is this:

when the user decides to load their "project" the program iterates through the folder and finds how many .html files are in there, it then creates tabs for them to be displayed in.

I have a custom QTextEdit which has a customer completer and syntax highlighting etc. the problem i am having at the moment is how to create them depending on the number needed.

i create a QStringList of file names:

QStringList m_files;
            m_files = aDialog.m_loadDirectory->entryList(QStringList("*.html"),QDir::Files|QDir::NoSymLinks);

then i iterate through each one of the list:

for(int i=0; i<m_files.count();i++)
{

}

and for each one i need to create a new custom QtextEdit

TextEdit *name = new TextEdit;

then add to the tab

tabs->addTab(name,"someTitle");

but as each TextEdit needs to be different for each tab (i think this is correct) i need a different Variable name for each one.

i thought about creating a list/array of TextEdit objects but as i dont know how many i need to use, i could end up easily with too many (wasted memory) or not enough..

any ideas on how i can get around this?

one thought..

would it be possible to create a TextEdit object before the loop

then make a copy of that object in the loop and add the copied object to the tab? (still variable naming problem...)

thanks

Upvotes: 2

Views: 2071

Answers (2)

Mat
Mat

Reputation: 206879

but as each TextEdit needs to be different for each tab (I think this is correct)

Yes, you need a different TextEdit in each tab.

I need a different Variable name for each one.

No, you don't need a different variable name for each one. You need different objects, but variable names don't have much to do with that.

A simple:

for (...) {
   TextEdit *te = new TextEdit(...);
   // set up that text edit in whatever way you need
   tabs->addWidget(te, "foo");
}

does exactly what you want. The variable name te is completely irrelevant (it won't even appear in the executable outside of debugging symbols). Each time through the loop, you'll be working on a separate TextEdit instance.

If you need to refer to that TextEdit by name at runtime, you can keep all your widgets in a collection, a QMap for instance.

 QMap<QString, QWidget*> all_editors;
 ...

 for (...) {
    TextEdit *te = ...;
    all_editors[filename] = te;
    ...
 }

Upvotes: 4

UmNyobe
UmNyobe

Reputation: 22920

You have discarded quickly the only viable solution : put your text edits in a collection. The textedit have to be created with new, so the collection itself will not waste space.

You can use a QPair<QTabWidget*, QTextEdit*> for simplest cases. For more complicated cases create a custom widget, and just make a list of those.

Copying a QObject is a really bad idea. I think the copy constructor is private so you will not even be able to do that

Upvotes: 1

Related Questions