LINUX.ORG.RU

Some questions about QT (QIconView)


0

0

[b][SIZE=1]OS: Linux Slackware 10.1
QT v3.3.3[/SIZE][/b]

1.(самое тупое и главное) - Как сделать чтобы при нажатии на кнопку вызывалась моя функция???
Вобщем я пишу типа Експлорера на QT и мне нада чтобы при нажатии на кнопку, вызывалась ф-ия, которая обновляет QIconView в соответствии с QLineEdit (ну типа написал путь, нажал на Go а в QIconView отобразилось содержимое папки...)
Сначала думал что это реализуется сигналами и слотами, но мне кажеться что это лишнее в моем случае... ведь можно же наверное проще... или мне всеже придется создавать мой класс от QIconEdit в котором определять метод refresh??? и уже к нему привязывать сигнал от QLineEdit ???

2. - как сделать чтобы в QIconView'е Item'ы добавлялись не слева на право и при достижении края переходили на новую строку, а чтоб добавлялись сверху вниз и переходили в новый столбик при достижении нижней границы ??? Чувствую что за это отвечает setArrangement, но никак не пойму как его юзать...

3. можно ли установить фон Бекграунда самого QIconView'а ? как?
4.(не менее важно чем п.1) - Куда постить вопросы по библиотеке QT? если я запостил не сюда, то перенесите в нужный раздел... и еще, киньте линки на форумы где могут помочь по QT... кроме forum.sources.ru канешна, это я и так знаю!

Фууух, вроде все... Жду помощи...

Ответ на: комментарий от butterfly

Что да? Можно проще, или придеться создавать новый класс?

Jenizix
() автор топика

Не нужно создавать новый класс. Сделай слот в классе, из которого всё это происходит. Выглядит так:

class MyClass {
// ...
QIconView *iconView;

protected slots:
void buttonPressed () {
iconView->some_complex_action_1 ();
iconView->some_complex_action_2 ();
iconView->refresh ();
}

// ...
public:
void init_or_whatever () {
QButton *button = new QButton ("Button");
// ...
connect (button, SIGNAL (clicked ()), this, SLOT (buttonPressed ()));
// ...
}
// ...
};

anonymous
()
Ответ на: комментарий от Jenizix

То есть как? Программа состоит из одного функции? Нет, это геморрой, если не сказать больше:). Должен быть переопределён хотя бы класс главного окна программы, в котором бы всё это делалось. В нём вы и создадите необходимый слот, а затем в его конструкторе законнектите с сигналом...

V_L_A_D ★★
()
Ответ на: комментарий от V_L_A_D

Почти из одной %)))- из двух )))))))) вот код:

it is my code:

[quote]#include <qapplication.h>
#include <qpushbutton.h>
#include <qvbox.h>
#include <qhbox.h>
#include <qiconview.h>
#include <qpixmap.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qdir.h>
#include <qlabel.h>

QLineEdit *addrtext = 0;
QVBox *mainbox = 0;
QIconView *iconview = 0;
QPixmap *pixmap = 0;

void refreshList(QString path)
{
QDir dir(path);

QStringList files = dir.entryList(QDir::Files | QDir::Hidden);
QStringList dirs = dir.entryList(QDir::Dirs | QDir::Hidden);
QStringList::Iterator it;

it = dirs.begin();
while (it != dirs.end()) {
if (*it != "." && *it != "..")
(void) new QIconViewItem(iconview,*it,*(pixmap));
++it;
}

it = files.begin();
while (it != files.end()) {
(void) new QIconViewItem(iconview,*it,*(pixmap));
++it;
}
}

int main(int argc, char *argv[])
{
QString path;
QApplication app(argc, argv);

mainbox = new QVBox(0);
mainbox->setCaption("Jenizix's explorer");
mainbox->setMargin(6);
mainbox->setSpacing(6);
mainbox->resize(600,400);

QHBox *addrbox = new QHBox(mainbox);

addrbox->setSpacing(10);
QLabel *l_addr = new QLabel("Path : ",addrbox);
addrtext = new QLineEdit(addrbox);
QPushButton *gobutton = new QPushButton("Go",addrbox);
addrtext->setText("/");
addrtext->show();
gobutton->show();
addrtext->installEventFilter(addrtext);

pixmap = new QPixmap("cpu.png");

iconview = new QIconView(mainbox);
iconview->setMaxItemWidth(150);
iconview->setGridX(150);
iconview->setItemTextPos(iconview->Right);

refreshList(addrtext->displayText());

iconview->setMaxItemTextLength(18);
app.setMainWidget(mainbox);
mainbox->show();

return app.exec();
}
[/quote]

Как мне сделать чтобы при нажатии на gobutton или при нажатии Enter в addrtext или при даблклике на итеме iconview'a вызывалась ф-ия refreshList(addrtext->displayText());

Jenizix
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.