QT = Форма - определение размеров + кнопка + поле ввода

Фактически просто переписываю пример для питона на Си++
вот что получилось =

#include < Windows.h >
#include < QtCore\QtCore >
#include < QtGui\QtGui >

#pragma comment(lib, "QtCore4.lib")
#pragma comment(lib, "QtGui4.lib")

int WINAPI WinMain(HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpcmdline,
  int ncmdshow)
{
// блок настройки кодировки
// выбирайте кодировку в соответсвии с реальной кодировкой исходника
QTextCodec* codec = QTextCodec::codecForName("cp1251");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QApplication app2(ncmdshow, (char **)lpcmdline);
//конец блока настройки кодировки

    
QWidget widget;

//#изменяем размеры родительского виджета
widget.resize(400, 400);
widget.setWindowTitle("simple");

//# вторым параметров в конструктор кнопки передаём ссылку на виджет
//# таким образом мы показываем что хотим видеть кнопку именно на форме (виджете)
//#а не где-то ещё
 QPushButton button2("HEllo WOrld =) !!!)))", &widget);

//#зададим подсказку - появится при наведении курсора мыши на кнопку
button2.setToolTip("Это кнопка создана <b>QT4.8.3</b> - на Си++ ");

//# изменим размер кнопки
//#  метод .sizeHint() - возвращает оптимальный размер
button2.resize(button2.sizeHint());

//#но если мы желаем задать размер сами ,то так:
button2.resize(150,80);

// переместим кнопку относительно левого верхнего угла
//#родительского виджета
button2.move(200, 300);
//
//#ну и давайте  -добавим что-то для передачи информации -
//#поле текстового ввода:

QLineEdit edit("буквы сюда))",&widget);
edit.setDragEnabled(1);
edit.move(100, 100);

widget.show();
	
     return app2.exec();
}


Ещё примеры работы с GUI на QT здесь

humanmashine's picture

ААААААААААААААААААААААА!!!!!! Кощунство!!!!!!!!!! Как это!!!!!!! Qt кросплатформенная библиотека, она позволяет писать приложения и обращаться к системным настройкам в общем, не привязывая к платформе. А тут платформозависимый код совместно с кроссплатформенным..... о мои глаза.... - это нож в моё сердце )))

vedro-compota's picture

в смысле

#include

или что именно не нравится?

_____________
матфак вгу и остальная классика =)

humanmashine's picture

И заголовок тоже, и функция main.
Иду по порядку. Дело в том, что Qt C++ - это не PyQt, в последнем всё уже скомпилированно и вам надо просто подключить добро, с Qt C++ всё гораздо сложнее, там приложение проходит два этапа компиляции -первый это qmake а потом уже стандартное компилирование. Для нормальной работы qmake необходим правильный файл с расширение .pro , для каждого проекта он настраивается по-особому.

Итак, как без гемороя делать коссплатформенный код с Qt, первый способ (он почему-то не был выбран): это использовать QtCreator - который сам сделает файл .pro и предоставит графический интерфейс его конфигурирования, для простых проектов лезть в файл .pro вам не придётся. QtCreator также предоставит много удобных иснтрументов для создания GUI ну и автоматом будет предлагать платформонезависимый код в автозаполнении при создании проектов.

Второй способ - это простой тектовый редактор - тогда вашими ручками сами будете всё набирать, и .pro файл тоже, а компилить тоже ручками - не ахти.

Третий способ. я не пробовал, это выбранный тут через VisualStudio - так вот, я не знаю как она обращается с .pro файлом, и как хорошо обращается с qmake, но я вижу по коду, что при создании проекта она просто издевается над Qt. Итак, что надо исправить чтобы текст программы стал кроссплатформенным в этом примере, и его можно было бы скопировать и скомпилировать под Linux без изменений:

  1. первое - это убрать библиотеку Windows.h - она вам не понадобится, всё что нужно предоставит библиотека Qt
  2. второе, убрать вот эту чушь:
    #pragma comment(lib, "QtCore4.lib")
    #pragma comment(lib, "QtGui4.lib")

    именно по этому блоку я подозреваю что что-то с qmake в VS не так... но есть кое что ещё, позже...

  3. Сделать нормальную функцию main, а именно:
    int main(int argc, char** argv){
    тут уже тот код что выше
    }
    

    а не та ужасная WinMain, кстати те аргументы что выше в main как раз и передаются в QApplication , а не как у вас

  4. Проблема с кодировкой, для Qt это не проблема, qmake при компиляции настроит нужную, в зависимости от системы,
    Тоже с путями, пути нужно писать в стиле Linux, при компиляции в Windows qmake их переделает как надо.
    Вот эти факты тоже наводят меня на мысль что там у вас что-то не так с qmake, так как зависимые пути и бубен с кодировкой, снижают переносимость кода

Ну вроде всё, ещё раз скажу, что как я говорил ранее гдето, Qt C++ это очень сложно, теже слои, о кторых я также ранее говорил - про них на форумах мало пишут, а они база, причём сам класс QLayout - это шибко сложно, всё что надо - это научиться юзать QBoxLayout QHBoxLayout QVBoxLayout.
Короче, если грамотно подходить к Qt C++ то го читать Макса Шлее, это не PyQt. Либо пересаживаться на QtCreator. Так как без глубокого познания работы Qt самому отследить что зависит от платформы, а что нет - сложно. А QtCreator многое автоматизирует.

vedro-compota's picture

вот он слой = http://fkn.ktu10.com/?q=node/2749
да.........что я про pro читал когда этот ужас настраивал......

_____________
матфак вгу и остальная классика =)

humanmashine's picture

Ой, у меня почему-то мой коммент два раза запостился